/**
 * 时间筛选工具类
 * 用于处理比赛数据的时间筛选逻辑
 */
export interface DateFilterResult {
  startTime: Date;
  endTime: Date;
  description: string;
}

/**
 * 推荐状态筛选结果
 */
export interface RecommendationFilterResult {
  filterCondition: (item: any) => boolean;
  description: string;
}

/**
 * 推荐状态筛选类型
 */
export type RecommendationStatusType = 'recommended' | 'pending';

/**
 * 根据筛选类型和当前时间计算时间范围
 * @param filterType 筛选类型：'current' | 'historical'
 * @returns 时间范围对象
 */
export function calculateDateRange(filterType: 'current' | 'historical'): DateFilterResult {
  const now = new Date();
  const currentTime = now.getHours() * 60 + now.getMinutes(); // 转换为分钟数便于比较
  const cutoffTime = 12 * 60 + 35; // 12:35 转换为分钟数
  
  // 获取今天中午12:35的时间
  const todayCutoff = new Date(now);
  todayCutoff.setHours(12, 35, 0, 0);
  
  // 获取昨天中午12:35的时间
  const yesterdayCutoff = new Date(todayCutoff);
  yesterdayCutoff.setDate(yesterdayCutoff.getDate() - 1);
  
  // 获取明天中午12:35的时间
  const tomorrowCutoff = new Date(todayCutoff);
  tomorrowCutoff.setDate(tomorrowCutoff.getDate() + 1);
  
  if (filterType === 'current') {
    if (currentTime >= cutoffTime) {
      // 当前时间大于等于中午12:35，筛选今天12:35到明天12:35的数据
      return {
        startTime: todayCutoff,
        endTime: tomorrowCutoff,
        description: `当前时段筛选: ${todayCutoff.toISOString()} 到 ${tomorrowCutoff.toISOString()}`
      };
    } else {
      // 当前时间小于中午12:35，筛选昨天12:35到今天12:35的数据
      return {
        startTime: yesterdayCutoff,
        endTime: todayCutoff,
        description: `当前时段筛选: ${yesterdayCutoff.toISOString()} 到 ${todayCutoff.toISOString()}`
      };
    }
  } else if (filterType === 'historical') {
    // 历史数据：返回除current规则之外的所有数据
    if (currentTime >= cutoffTime) {
      // 当前时间大于等于中午12:35，历史数据为1900-01-01到当天12:35的所有数据
      return {
        startTime: new Date('1900-01-01'), // 使用一个很早的日期作为起始时间
        endTime: todayCutoff,
        description: `历史时段筛选: 所有早于 ${todayCutoff.toISOString()} 的数据`
      };
    } else {
      // 当前时间小于中午12:35，历史数据为1900-01-01到昨天12:35的所有数据
      return {
        startTime: new Date('1900-01-01'), // 使用一个很早的日期作为起始时间
        endTime: yesterdayCutoff,
        description: `历史时段筛选: 所有早于 ${yesterdayCutoff.toISOString()} 的数据`
      };
    }
  }
  
  throw new Error(`不支持的筛选类型: ${filterType}`);
}

/**
 * 根据推荐状态字段值创建筛选条件
 * @param recommendationStatus 推荐状态字段值：'recommended' | 'pending'
 * @returns 推荐状态筛选结果
 */
export function createRecommendationFilter(recommendationStatus: RecommendationStatusType): RecommendationFilterResult {
  if (recommendationStatus === 'recommended') {
    return {
      filterCondition: (item: any) => {
        // 筛选已推荐的数据：至少有一个投注选项有推荐结果
        if (!item.bettings || !Array.isArray(item.bettings)) {
          return false;
        }
        return item.bettings.some((betting: any) => {
          const recommendedResult = betting.recommendedResult;
          return recommendedResult !== null && 
                 recommendedResult !== undefined && 
                 recommendedResult !== '' && 
                 !(Array.isArray(recommendedResult) && recommendedResult.length === 0);
        });
      },
      description: '已推荐数据筛选: 至少有一个投注选项有推荐结果的比赛'
    };
  } else if (recommendationStatus === 'pending') {
    return {
      filterCondition: (item: any) => {
        // 筛选未推荐的数据：所有投注选项都没有推荐结果
        if (!item.bettings || !Array.isArray(item.bettings)) {
          return true; // 没有投注信息视为未推荐
        }
        return item.bettings.every((betting: any) => {
          const recommendedResult = betting.recommendedResult;
          return recommendedResult === null || 
                 recommendedResult === undefined || 
                 recommendedResult === '' || 
                 (Array.isArray(recommendedResult) && recommendedResult.length === 0);
        });
      },
      description: '未推荐数据筛选: 所有投注选项都没有推荐结果的比赛'
    };
  }
  
  throw new Error(`不支持的推荐状态类型: ${recommendationStatus}`);
}

/**
 * 获取当前时间的描述信息
 * @returns 当前时间描述
 */
export function getCurrentTimeDescription(): string {
  const now = new Date();
  const currentTime = now.getHours() * 60 + now.getMinutes();
  const cutoffTime = 12 * 60 + 35; // 12:35
  const timeStr = now.toLocaleString('zh-CN', { 
    timeZone: 'Asia/Shanghai',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  });
  
  const period = currentTime >= cutoffTime ? '中午12:35后' : '中午12:35前';
  return `当前时间: ${timeStr} (${period})`;
}